﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using TVPeruRFIDMovil.Formularios;
using TVPeruRFIDMovil.ServicioWS;
using TVPeruRFIDMovil.Clases.Negocio;
using LH.Library;
using TVPeruRFIDMovil.Clases.Movil;
using TVPeruRFIDMovil.Herramientas;

namespace TVPeruRFIDMovil
{
    public partial class frmSolicitudMovimientoIngreso : frmBase
    {
        #region --- Variables y Constantes ---
        private Solicitud[] listaSolicitud = null;
        private Usuario usuarioSolicitante = null;

        private const string CAMPO_IDUSUARIO = "idUsuario";
        private const string CAMPO_NOMBRE = "nombre";

        #endregion
        
        #region --- Constructor ---
        public frmSolicitudMovimientoIngreso()
        {
            InitializeComponent();
        }
        #endregion

        #region --- Eventos formulario ---
        private void frmSolicitudMovimientoIngreso_Load(object sender, EventArgs e)
        {
              cargarFormulario();
        }

        private void cboUsuario_SelectedIndexChanged(object sender, EventArgs e)
        {
              obtenerSolicitudes();
        }

        private void mnuContinuar_Click(object sender, EventArgs e)
        {
             atenderDevolucion();
        }

        private void mnuSalir_Click(object sender, EventArgs e)
        {
            salir();
        }
        #endregion 
        #region --- Metodos Propios ---

        private void cargarFormulario()
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;

                MetodosAplicacion.configuraFormulario(this);

                cargarUsuarioSolicitante();
            }
            catch (Exception ex)
            {
                mostrarMensajeError(ex, this.lblTitulo.Text);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
        private void cargarUsuarioSolicitante()
        {
            Usuario[] listaUsuarioSolicitante = null;

            // Obtener listado de analistas del servicio web
            using (Interfase interfase = new Interfase())
            {
                listaUsuarioSolicitante = interfase.listarUsuarioSolicitante();
            }

            // Estableciendo fuente de datos de combo usuario
            this.cboUsuario.DataSource = listaUsuarioSolicitante;
            this.cboUsuario.ValueMember = CAMPO_IDUSUARIO;
            this.cboUsuario.DisplayMember = CAMPO_NOMBRE;

        }
        private void obtenerSolicitudes()
        {

            this.usuarioSolicitante = (Usuario)this.cboUsuario.SelectedItem;

            // Obtener listado de analistas del servicio web
            using (Interfase interfase = new Interfase())
            {
                this.listaSolicitud = interfase.listarSolicitudUsuarioEntrada(this.usuarioSolicitante);
            }

            if (this.listaSolicitud != null && this.listaSolicitud.Length > 0)
            {
                // Se agrega Solicitud a la grilla
                this.lvwListado.BeginUpdate();
                this.lvwListado.Items.Clear();

                ListViewItem nuevoItem = null;

                foreach (Solicitud solicitudObtenida in this.listaSolicitud)
                {

                    if (solicitudObtenida.idSolicitudEstado.Equals(Constantes.ESTADO_SOLICITUD_APROBADO))
                    {
                        nuevoItem = new ListViewItem(Convert.ToString(solicitudObtenida.codSolicitud));

                        if (solicitudObtenida.idSolicitudEstado.Equals(Constantes.ESTADO_SOLICITUD_APROBADO))
                        {
                            nuevoItem.SubItems.Add(Constantes.ESTADO_SOLICITUD_DESCRIPCION_APROBADO);
                        }

                        nuevoItem.SubItems.Add(Convert.ToString(solicitudObtenida.fechaRegistro));
                        this.lvwListado.Items.Add(nuevoItem);

                    }
                }

                this.lvwListado.EndUpdate();

            }
        }
         private bool validarEntradas()
        {
            if (this.lvwListado.Items.Count == 0)
            {
                Util.CampoNecesario(this.lvwListado, "Debe seleccionar por lo menos una solicitud a atender");
                return true;
            }
            return false;
        }

        private void atenderDevolucion()
        {
            Solicitud solicitudObtenida = null;
            DetalleBienSolicitud[] listaDetalleBienSolicitud = null;

            try
            {
                if (validarEntradas()) { return; }

                Cursor.Current = Cursors.WaitCursor;

                // Obteniendo codigo de solicitud a atender
                string codigoSolicitud = this.lvwListado.Items[this.lvwListado.SelectedIndices[0]].Text;
               
                foreach (Solicitud solicitud in listaSolicitud)
                {
                    if (solicitud.codSolicitud.Equals(Convert.ToInt32(codigoSolicitud)))
                    {
                        solicitudObtenida = solicitud;
                        break;
                    }
                }
                // Obtener listado de
                using (Interfase interfase = new Interfase())
                {
                    listaDetalleBienSolicitud = interfase.obtenerSolicitudEntrada(solicitudObtenida);
                }
                // Si solicitud es nula o no tiene detalle, entonces salir
                if ((listaDetalleBienSolicitud == null) || (listaDetalleBienSolicitud.Length <= 0))
                {
                    Util.ShowMessageboxExclamacion("La solicitud no tiene bienes pendientes por salir", this.Text);
                    return;
                }

                // Mostrar formulario de detalle de solicitud con los bienes a salir 
                using (frmRegistrarMovimientoIngreso frmRegistrarMovimientoIngreso = new frmRegistrarMovimientoIngreso())
                {
                    frmRegistrarMovimientoIngreso.solicitud = solicitudObtenida;
                    frmRegistrarMovimientoIngreso.listaDetalleBienSolicitudObt = listaDetalleBienSolicitud;
                    if (frmRegistrarMovimientoIngreso.ShowDialog() == DialogResult.Cancel) { frmRegistrarMovimientoIngreso.Dispose(); return; }
                    frmRegistrarMovimientoIngreso.Dispose();
                }

                // Metodo que permite refrescar listado de orden de compra
                obtenerSolicitudes();
            }
            catch (Exception ex)
            {
                mostrarMensajeError(ex, this.lblTitulo.Text); 
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
        private void salir()
        {
            this.Close();
        }

        #endregion

    }
}